/*
 * TestListaInvertida.cpp
 *
 *  Created on: 05/11/2013
 *      Author: Miguel
 */

#include "TestsInvertedList.h"

TestListaInvertida::TestListaInvertida() {}

TestListaInvertida::~TestListaInvertida() {}

void TestListaInvertida::setTexto() {
	texto = "La vida sin problemas es matar el tiempo a lo bobo";
}

void TestListaInvertida::TestSiguiente() {
	char* txt = "La vida sin problemas es matar el tiempo a lo bobo";
	ListaInvertida lista("consulta", 2);
	lista.setTexto(txt);
	String t;

	while ( lista.siguiente() )
	{
		std::cout << "entro" << std::endl;
		//t = lista.getTermino();
		std::cout << "TERMINO: " << t << "." << std::endl;
		//t.imprimir();
	}
}

void TestListaInvertida::TestOAAgregarYDevolverSiguiente() {
	OrdenDeAparicion OA("consulta", 2);
	OA.abrir();

	BigInt id;

	id = OA.agregarYDevolverID("vida");
	std::cout << "id vida: " << id << std::endl;

	id = OA.agregarYDevolverID("chocolate");
	std::cout << "id chocolate: " << id << std::endl;

	id = OA.agregarYDevolverID("turron");
	std::cout << "id turron: " << id << std::endl;

	id = OA.agregarYDevolverID("matoriaso");
	std::cout << "id matoriaso: " << id << std::endl;

	id = OA.agregarYDevolverID("chocolate");
	std::cout << "id chocolate: " << id << std::endl;

	OA.cerrar();
}

void TestListaInvertida::TestOTAgregarTermino() {
	OcurrenciaDeTerminos OT("consulta", 3);
	OT.abrir();

	OT.agregarIDAlDoc(3);
	OT.agregarIDAlDoc(59);
	OT.agregarIDAlDoc(4);
	OT.agregarIDAlDoc(2);
	OT.agregarIDAlDoc(23);
	OT.agregarIDAlDoc(4);
	OT.agregarIDAlDoc(4);
	OT.agregarIDAlDoc(59);
	OT.agregarIDAlDoc(3);
	OT.agregarIDAlDoc(4);

	OT.archivo.rewind();
	IDs id;
	while ( OT.siguienteID(id) )
		id.imprimir();
	OT.cerrar();

	OT.ordenar();
	OT.listarOrdenado();
}

void TestListaInvertida::TestCrearArchivoDeFrencuencia() {
	FrecuenciaDeTerminos FT("consulta");

	std::cout<< "CREANDO ARCHIVO FREC" << std::endl;
	FT.crearArchivoConFrecuencias("_TMPconsulta1.tmp");

	std::cout<< "LISTAR" << std::endl;
	IDs id;
	SecuentialFile<IDs> frec(BLOCK_SIZE); frec.open("FRECconsulta");
	while ( frec.next(id) )
		id.imprimir();
}

void TestListaInvertida::TestCrearFrecYActualizarLista(){
	char txt1[] = "Este es un texto de prueba para el lista invertida";
	char txt2[] = "Esto es una cadena de caracteres";
	char txt3[] = "Ultima cadena de prueba a evaluar para la recuperacion de texto";
	ListaInvertida listaInvert("consulta", 8);
	SecuentialFile<IDs> ids(BLOCK_SIZE);
	Lista lista;

	listaInvert.setTexto(txt3);
	String path_frec = listaInvert.crearFrecuenciasFile(); // HASTA ACA ESTA BIEN, EL ARCHIVO DE FRECUENCIAS
	ids.open(path_frec);								   // POR TERMINO LO CREA

	IDs id;
	listaInvert.preparar();
	while ( ids.next(id) ){
		if (listaInvert.recuperarLista(id.getIdTermino(), lista)){
			std::cout <<"Lista del termino " << id.getIdTermino() << " eliminada." << std::endl;;
			lista.agregarDoc(id);
			listaInvert.salvarNuevaLista(lista);
		}
		else
		{
			std::cout <<"Lista: " << id.getIdTermino() << " no encontrada." << std::endl;
			lista.crearConDoc(id);
			listaInvert.salvarNuevaLista(lista);
		}
		lista.limpiar();
	}
	ids.close();
	listaInvert.cerrar();

	if ( listaInvert.mergeAuxYOriginal() == 0 )
		listaInvert.cambiarAuxPorOriginal();
	else
		listaInvert.cambiarNuevoPorOriginal();

	listaInvert.eliminarTemporales();
	std::cout << "LISTAS IMPRESAS: " << std::endl;
	listaInvert.imprimirListas();
}

void TestListaInvertida::TestCrearFrecYActualizarLista2() {
	/*
	ListaInvertida lista_invertida("consulta",1);
	lista_invertida.setTexto(txt2);

	String path_frec = lista_invertida.crearFrecuenciasFile();
	SecuentialFile<IDs> frecuencias(BLOCK_SIZE);
	frecuencias.open(path_frec);

	lista_invertida.preparar();

	IDs id; Lista lista;
	while( frecuencias.next(id) ) {
		std::cout << "PRUEBA" << std::endl;
		if ( lista_invertida.recuperarLista2(id.getIdTermino(), lista) )
			lista.agregarDoc(id);
		else
			lista.crearConDoc(id);
		if ( !lista_invertida.borrarLista2(id.getIdTermino()) )
			std::cout << "NO SE PUDO BORRAR LA LISTA: " << id.getIdTermino() << std::endl;
		lista_invertida.guardarLista2(lista);
		lista.limpiar();
	}
	frecuencias.close();


	lista_invertida.cerrar();

	lista_invertida.imprimirListas();
	lista_invertida.eliminarTemporales();*/
}

void TestListaInvertida::PruebaLista() {
	Lista lista1, lista2;
	IDs id1(1,1), id2(1,2), id3(1,3);

	lista1.crearConDoc(id1);
	lista1.agregarDoc(id2);
	lista1.agregarDoc(id3);
	lista1.imprimir();

	SecuentialFile<Lista> listas(BLOCK_SIZE);
	listas.create("listas");
	listas.open("listas");
	listas.add(lista1);
	std::cout << "PRUEBA" << std::endl;
	listas.close();
	listas.open("listas");
	listas.next(lista2);
	lista2.imprimir();
	listas.close();
}
